using System;
using System.Collections.Generic;

namespace Diploma.Models.IRepositories
{
    public interface IStudentsRepository
    {
        Student GetStudent(Guid id);
        void Update(Student newStudent);
        void Add(Student student);
        void Delete(Student student);
        CollaborationPropose GetCollaborationPropose(Student student);
        IEnumerable<Student> GetDeletedStudents();
        Dictionary<QualificationLevel, IEnumerable<KeyValuePair<StudentsGroup, IEnumerable<Student>>>>
            GetDeletedStudentsGroupedByGroupAndLevel();
        IEnumerable<Student> GetStudents();
        IEnumerable<Student> GetStudents(Guid groupId);
        Dictionary<QualificationLevel, IEnumerable<KeyValuePair<StudentsGroup, IEnumerable<Student>>>>
            GetStudentsGrouped(StudentsGroup group);
        void Restore(Guid studentId);
        Student GetStudentByCollaborationRoom(Guid id);
        IEnumerable<Student> GetMagisterStudentsWithoutPractice();
        IEnumerable<Student> GetStudentsForLecturerPractice(Guid lecturerId);
        void AttachLecturerPracticeForStudent(Guid userId, Guid lecturerId);
        void DetachLecturerPracticeFromStudent(Guid userId);
        void UpdateUserProperties(Guid userId, bool themeWithOrder, bool notice, bool feedback, bool signatureNormControl, bool preliminaryPresentation, bool signatureLecturer, bool signatureStudent, bool signatureConsultants, bool slides, bool archive);
        bool IsAllPointSuccess(Guid userId);
        void UpdateUserWorkPlace(Guid id, bool placement);
        void UpdatePracticePlace(Guid id, Guid? practicePlaceId);
        IEnumerable<Student> GetStudentsForCompany(Guid companyId);
        IEnumerable<Student> GetStudentsForCompany(int qualificationLevelId, Guid companyId);
        string GetStudentPracticeLecturer(Guid studentId);
    }
}